package jdbc;

import java.sql.*;
import java.util.Date;


/**
 * 测试事务
 * 什么是事务:一组要么同时执行成功,要么同时执行失败的SQL语句,是数据库操作的一个执行单元
 */
public class Demo06 {
    public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement ps=null;
        try {
            //加载驱动类
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc?serverTimezone=Asia/Shanghai","root","123456");
            conn.setAutoCommit(false);//jdbc中默认是true自动提交事务

            String sql="insert into t_user (username,pwd,regTime) values (?,?,?)";//?是占位符
            ps=conn.prepareStatement(sql);
            ps.setString(1,"lqk");
            ps.setString(2,"123456");
            ps.setTimestamp(3,new Timestamp(new Date().getTime()));
            ps.executeUpdate();

            conn.commit();

        } catch (Exception e) {
            e.printStackTrace();
            try {
                conn.rollback();//事务中有多条语句遇到一条异常就回滚到修改表之前的状态
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
        }finally {
            if (ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
